package com.syh.jn.scm.service.impl.operation.financial;

import com.alibaba.dubbo.config.annotation.Service;
import com.syh.core.ddd.infrastructure.repository.AggregateRepository;
import com.syh.core.ddd.service.AbstractServiceImpl;
import com.syh.jn.scm.domain.operation.entity.financial.Financial;
import com.syh.jn.scm.domain.operation.entity.financial.FinancialAccount;
import com.syh.jn.scm.domain.operation.entity.financial.FinancialContact;
import com.syh.jn.scm.domain.operation.repository.financial.FinancialRepository;
import com.syh.jn.scm.dto.operation.financial.*;
import com.syh.jn.scm.service.api.operation.financial.FinancialService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
@Transactional
public class FinancialServiceImpl extends AbstractServiceImpl<FinancialSto, FinancialMto, FinancialVo, Financial, Long> implements FinancialService {
  @Autowired
  private FinancialRepository financialRepositoryImpl;

  @Override
  protected AggregateRepository<Financial, Long> getAggregateRepository() {
    return financialRepositoryImpl;
  }

  /**
   * 新增金融机构
   * @param sto
   * @return
   */
  @Override
  public Long save(FinancialSto sto) {
    Financial cia = new Financial(sto);
    return financialRepositoryImpl.add(cia);
  }

  /**
   * 修改金融机构
   * @param mto
   */
  @Override
  public void update(FinancialMto mto) {
    Financial cia = financialRepositoryImpl.getById(mto.getId());
    cia.modify(mto);
    financialRepositoryImpl.update(cia);
  }

  /**
   * 根据id删除金融机构
   * @param id
   */
  @Override
  public void delete(Long id) {
    Financial cia = financialRepositoryImpl.getById(id);
    cia.destroy(id);
    financialRepositoryImpl.remove(cia);
  }

  /**
   * 启用
   * @param id
   */
  @Override
  public void enabled(Long id) {
    Financial cia = financialRepositoryImpl.getById(id);
    cia.enabled();
    financialRepositoryImpl.enabled(cia);
  }

  /**
   * 停用
   * @param id
   */
  @Override
  public void disabled(Long id) {
    Financial cia = financialRepositoryImpl.getById(id);
    cia.disabled();
    financialRepositoryImpl.disabled(cia);
  }

  /**
   * 关联供应商
   * @param id 金额机构id
   */
  @Override
  public void contact(Long id,FinancialContactDto dto) {
    FinancialContact contact = new FinancialContact(dto);
    financialRepositoryImpl.contact(id,contact);
  }

  /**
   * 运营端新增金融账号
   * @param dto
   * @return
   */
  @Override
  public Boolean addAccount(FinancialAccountDto dto) {
    FinancialAccount account = new FinancialAccount(dto);
    return financialRepositoryImpl.addAccount(account);
  }

  /**
   * 根据id获取金融机构地址
   *
   * @param id
   * @return
   */
  @Override
  public List<FinancialAddressVo> getAddress(Long id) {
    Financial financial = financialRepositoryImpl.getById(id);
    financial.check(financial);
    return financialRepositoryImpl.getAddress(id);
  }
}
